// JS中的面向对象和java等面向对象语言不一致，一般的面向对象语言都有类和实例的概念
// 而JS中的面向对象是通过原型(prototype)来实现的
//JavaScript的原型链和java的Class区别：没有Class的概念，所有对象都是实例，继承关系是指把一个对象的原型指向另一个对象

//比如以下代码

//一个student对象
var Student = {
  name: 'Robot',
  height: 1.2,
  run: function () {
    console.log(this.name + ' is running...')
  },
}
//创建一个小明
var xiaoming = {
  name: '小明',
}

xiaoming.__proto__ = Student //把xiaoming的原型指向了对象Student,因此xiaoming继承了Student中的属性和方法
xiaoming.name
xiaoming.run()



var Bird = {
  fly: function () {
    console.log(this.name + ' is flying...')
  },
}

xiaoming.__proto__ = Bird //原型指向Bird
xiaoming.fly() //小明只能飞了

//在编写JavaScript代码时，不要直接用obj.__proto__去改变一个对象的原型，
//并且，低版本的IE也无法使用__proto__。
//Object.create()方法可以传入一个原型对象，并创建一个基于该原型的新对象，但是新对象什么属性都没有。
//因此，我们可以编写一个函数来创建xiaoming

//原型对象
var Student = {
  name: 'Robot',
  height: 1.2,
  run: function () {
    console.log(this.name + ' is running...')
  }
}

//使用object.create创建一个对象
function createStudent(name) {
  // 基于Student原型创建一个新对象:
  var s = Object.create(Student)
  // 初始化新对象:
  s.name = name
  return s
}
var xiaoming = createStudent('小明')
xiaoming.run()
xiaoming.__proto__ === Student


